import com.cos.mb.dao.EmpDao;
import com.cos.mb.entity.Emp;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.Test;

import java.io.IOException;
import java.io.InputStream;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * @author: COS
 * @time: 2022/5/30 14:15
 * @description:
 * 1. mybatis-config.xml
 *      environments => environment  environments属性的default 的值 就是 他子标签environment 的属性id的值
 *    transactionManager 设置事务管理 直接设置为使用JDBC的事务管理
 *    datasource 配置数据库连接池 driver url username password
 * 2. xxxDao xxxMapper.xml
 *    xxxMapper.xml 中的跟标签 mapper 的属性 namespace 值是 对应这个映射文件的Dao接口全限定名, 跟接口进行捆绑
 *    接口中的方法 必须 和mapper.xml 中的标签进行一一对应起来
 *    调用接口中的方法,等同于调用sql语句获取结果
 * 3.需要在mybatis-config.xml中配置 映射文件的路径  <mappers> 注意 不是.分割而是/
 * 4.
 * InputStream is = Resources.getResourceAsStream("主配置文件名");  相当于  Properties Pro= new Properties();  pro.load(Demo.class.getResourceAsStream("配置文件名"))
 *  获取数据库链接池
 * SqlSessionFactory factory = new SqlSessionfactoryBuilder().build(is);
 *  获取链接
 *  SqlSession session = factory.openSession();
 *  使用这个session ,来获取mybatis为我们准备的Dao接口的实现类
 *  EmpDao empDao = session.getMapper(EmpDao.class);
 *  //调用方法即可 ,数据封装mybatis自动帮我们完成
 *  List<Emp> empLIst = empDao.getAll();
 *
 *
 */
public class Demo {
    @Test
    public void t1() throws IOException {
        InputStream is = Resources.getResourceAsStream("mybatis-config.xml");
        // sqlsessionfactory   => 数据库连接池
        SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(is);
        //sqlsession ==>connection
        //factory.openSession();  ==>ds.getConnection();
        SqlSession session = factory.openSession();
        //获取EmpDao 的实现类,该实现有Mybatis自动生成
        EmpDao mapper = session.getMapper(EmpDao.class);

//        System.out.println(mapper.getAll());
//        System.out.println(mapper.getAllEno());


//        System.out.println(mapper.getEmpByEno(1004));
//        System.out.println(mapper.getEmpBySexAndEname("张5", "女"));
//        System.out.println(mapper.getAllEmpName());
//        System.out.println(mapper.getAllEmpAvgSalary());\
        Emp e = new Emp("女");
//        e.setEsex();
//        System.out.println(mapper.getEmpByData(e));


//        List<Emp> empByDno = mapper.getEmpByDno(Arrays.asList(102, 103));
//        List<Emp> empByDno = mapper.getEmpByDnoByArray(new Integer[]{102,103});
//
//        for (Emp emp : empByDno) {
//            System.out.println(emp);
//        }

        Map<String,Object> param=new HashMap<>();
        param.put("startDate","2021-10-01");
        param.put("endDate","2021-12-01");
        List<Emp> empByBornDates = mapper.getEmpByBornDates(param);
        for (Emp empByBornDate : empByBornDates) {
            System.out.println(empByBornDate);
        }

    }
}
